// #include <bits/stdc++.h>
// using namespace std;

// // Function to decompress the string starting from index i
// // Returns the decompressed string and updates i to the position after processing
// string decompress(const string& s, int& i) {
//     string result = "";
    
//     while (i < s.length()) {
//         if (s[i] == ']') { // End of current bracketed expression
//             i++; // Move past ']'
//             return result;
//         } else if (s[i] == '[') { // Start of a compressed pattern
//             i++; // Move past '['
//             // Parse the number before the bracket
//             int num = 0;
//             while (i < s.length() && isdigit(s[i])) {
//                 num = num * 10 + (s[i] - '0');
//                 i++;
//             }
//             // Recursively decompress the substring inside the brackets
//             string sub = decompress(s, i);
//             // Append the decompressed substring 'num' times
//             for (int j = 0; j < num; j++) {
//                 result += sub;
//             }
//         } else { 
//             result += s[i];
//             i++;
//         }
//     }
    
//     return result;
// }

// int main() {
//     string s;
//     cin >> s; // Read input string
//     int i = 0; // Start index for decompression
//     string result = decompress(s, i); // Decompress the string
//     cout << result << endl; // Output the result
//     return 0;
// }







#include <iostream>
using namespace std;
string dfs(string& s, int& pos) {
    string temp = "";
    while(pos < s.size()) {
        if(s[pos] == ']') {
            pos++;
            return temp;
        }else if(s[pos] == '[') {
            pos++;
            int t = 0;
            while((pos < s.size()) && s[pos] >= '0' && s[pos] <= '9') {
                t = 10 * t + s[pos++] - '0';
            }
            string str = dfs(s, pos);
            for(int i = 0; i < t; i++) {
                temp += str;
            }
        }else {
            temp +=s[pos++];
        }
    }
    return temp;
}
int main() {
    string s;
    cin >> s;
    int i = 0;
    cout << dfs(s, i); // 这里的i要传入引用
    return 0;
}